package org.eddycar.jproyeddycar.comun.modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Persona implements Serializable {

    @Id
//    @GeneratedValue(strategy = GenerationType.TABLE)
//    private Long id;
    private String cedula;
    private String nombres;
    private String apellidos;
    @Enumerated(EnumType.STRING)
    private EstadoCivil estado;
    private String telefonoDomicilio;
    private String telefonoCedlular;
    private String direccionDomicilio;
    private String direccionTrabajo;
    private int edad;

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getCedula() {
        return cedula;
    }
//
//    public Long getId() {
//        return id;
//    }
//
//    public void setId(Long id) {
//        this.id = id;
//    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public String getDireccionDomicilio() {
        return direccionDomicilio;
    }

    public void setDireccionDomicilio(String direccionDomicilio) {
        this.direccionDomicilio = direccionDomicilio;
    }

    public String getDireccionTrabajo() {
        return direccionTrabajo;
    }

    public void setDireccionTrabajo(String direccionTrabajo) {
        this.direccionTrabajo = direccionTrabajo;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    public EstadoCivil getEstado() {
        return estado;
    }

    public void setEstado(EstadoCivil estado) {
        this.estado = estado;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getTelefonoCedlular() {
        return telefonoCedlular;
    }

    public void setTelefonoCedlular(String telefonoCedlular) {
        this.telefonoCedlular = telefonoCedlular;
    }

    public String getTelefonoDomicilio() {
        return telefonoDomicilio;
    }

    public void setTelefonoDomicilio(String telefonoDomicilio) {
        this.telefonoDomicilio = telefonoDomicilio;
    }

    public Persona() {
    }

    public Persona(String cedula, String nombres, String apellidos, EstadoCivil estado, String telefonoDomicilio, String telefonoCedlular, String direccionDomicilio, String direccionTrabajo, int edad) {
        this.cedula = cedula;
        this.nombres = nombres;
        this.apellidos = apellidos;
        this.estado = estado;
        this.telefonoDomicilio = telefonoDomicilio;
        this.telefonoCedlular = telefonoCedlular;
        this.direccionDomicilio = direccionDomicilio;
        this.direccionTrabajo = direccionTrabajo;
        this.edad = edad;
    }

    public static boolean verificaCedulaRuc(String cedula) {
        int decu[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        int total = 0;
        if (cedula.length() == 10) {
            for (int j = 0; j <= 9; j++) {
                decu[j] = (cedula.charAt(j));
                switch (decu[j]) {
                    case 48:
                        decu[j] = 0;
                        break;
                    case 49:
                        decu[j] = 1;
                        break;
                    case 50:
                        decu[j] = 2;
                        break;
                    case 51:
                        decu[j] = 3;
                        break;
                    case 52:
                        decu[j] = 4;
                        break;
                    case 53:
                        decu[j] = 5;
                        break;
                    case 54:
                        decu[j] = 6;
                        break;
                    case 55:
                        decu[j] = 7;
                        break;
                    case 56:
                        decu[j] = 8;
                        break;
                    case 57:
                        decu[j] = 9;
                        break;
                }
            }

            int numPro = (decu[0] * 10) + decu[1];
            if ((numPro >= 1 & numPro <= 24) & (decu[2] >= 0 & decu[2] < 6)) {
                for (int i = 0; i <= 8; i++) {
                    if (i % 2 == 0) {
                        decu[i] = decu[i] * 2;
                        if (decu[i] > 9) {
                            decu[i] = decu[i] - 9;
                        }
                    }
                    total = total + decu[i];
                }
                double decProxima = total / 10;
                decProxima = (decProxima + 1) * 10;
                double verifica = decProxima - total;
                if ((verifica == decu[9]) || (verifica == 10 & decu[9] == 0)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}
